package com.dc.refactoring._3_重新组织数据._6_ChangeUnidirectionalAssociationToBidirectional.step2;

/**
 * 【2】决定由哪一个类负责控制关联关系？建议由单个类类操控，这样就可以将所有处理关联关系的逻辑安置于一地
 *      1、如果两者都是引用对象，而其间的关联是“一对多”关系，那么就由“拥有单一引用”的那一方承担“控制者”角。
 *      2、如果某个对象是组成另一个对象的部件，那么由后者负责控制关联关系。
 *      3、如果两者都是引用对象，其间的关联是“多对多”关系，那么随便其中哪个对象来控制关联关系，都无所谓。
 */
public class Order {
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    // 【4】修改 控制函数，令它同时更新反向指针
    public void setCustomer(Customer arg) {
        // 先让对方删除指向你的指针，再将你的指针指向一个新对象，最后让那个新对象把它的指针指向你
        if (customer != null) {
            customer.friendOrders().remove(this);
        }
        customer = arg;
        if (customer != null) {
            customer.addOrder(this);
        }
    }
}
